home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 June / Chip_2002-06_cd1.bin / zkuste / delphi / kolekce / d6 / rxlibsetup.exe / {app} / units / CHPSWDLG.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-02-19  |  5.8 KB  |  204 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {         Delphi VCL Extensions (RX)                    }
  4. {                                                       }
  5. {         Copyright (c) 2001,2002 SGB Software          }
  6. {         Copyright (c) 1997, 1998 Fedor Koshevnikov,   }
  7. {                        Igor Pavluk and Serge Korolev  }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11.  
  12.  
  13. unit ChPswDlg;
  14.  
  15. {$I RX.INC}
  16.  
  17. interface
  18.  
  19. uses
  20.   SysUtils, {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
  21.   Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons,
  22.   DBTables, DB;
  23.  
  24. type
  25.   TChangePasswordEvent = function(UsersTable: TTable;
  26.     const OldPassword, NewPassword: string): Boolean of object;
  27.  
  28.   TChPswdForm = class(TForm)
  29.     OldPswdLabel: TLabel;
  30.     OldPswd: TEdit;
  31.     NewPswdLabel: TLabel;
  32.     NewPswd: TEdit;
  33.     ConfirmLabel: TLabel;
  34.     ConfirmNewPswd: TEdit;
  35.     OkBtn: TButton;
  36.     CancelBtn: TButton;
  37.     procedure OkBtnClick(Sender: TObject);
  38.     procedure FormShow(Sender: TObject);
  39.     procedure FormCreate(Sender: TObject);
  40.     procedure PswdChange(Sender: TObject);
  41.   private
  42.     { Private declarations }
  43.     FAttempt: Integer;
  44.     FEnableEmpty: Boolean;
  45.     procedure ClearEdits;
  46.     procedure OkEnabled;
  47.   protected
  48.     procedure CreateParams(var Params: TCreateParams); override;
  49.   public
  50.     { Public declarations }
  51.     Database: TDatabase;
  52.     AttemptNumber: Integer;
  53.     UsersTableName: string;
  54.     UserNameField: string;
  55.     LoginName: string;
  56.     OnChangePassword: TChangePasswordEvent;
  57.   end;
  58.  
  59. function ChangePasswordDialog(Database: TDatabase; AttemptNumber: Integer;
  60.   const UsersTableName, UserNameField, LoginName: string;
  61.   MaxPwdLen: Integer; EnableEmptyPassword: Boolean;
  62.   ChangePasswordEvent: TChangePasswordEvent): Boolean;
  63.  
  64. implementation
  65.  
  66. uses Consts, RXDConst, VCLUtils;
  67.  
  68. {$R *.DFM}
  69.  
  70. function ChangePasswordDialog(Database: TDatabase; AttemptNumber: Integer;
  71.   const UsersTableName, UserNameField, LoginName: string;
  72.   MaxPwdLen: Integer; EnableEmptyPassword: Boolean;
  73.   ChangePasswordEvent: TChangePasswordEvent): Boolean;
  74. var
  75.   Form: TChPswdForm;
  76.   SaveCursor: TCursor;
  77. begin
  78.   SaveCursor := Screen.Cursor;
  79.   Screen.Cursor := crDefault;
  80.   try
  81.     Form := TChPswdForm.Create(Application);
  82.     try
  83.       Form.Database := Database;
  84.       Form.AttemptNumber := AttemptNumber;
  85.       Form.UsersTableName := UsersTableName;
  86.       Form.UserNameField := UserNameField;
  87.       Form.LoginName := LoginName;
  88.       Form.OldPswd.MaxLength := MaxPwdLen;
  89.       Form.NewPswd.MaxLength := MaxPwdLen;
  90.       Form.ConfirmNewPswd.MaxLength := MaxPwdLen;
  91.       Form.FEnableEmpty := EnableEmptyPassword;
  92.       Form.OnChangePassword := ChangePasswordEvent;
  93.       Result := (Form.ShowModal = mrOk);
  94.     finally
  95.       Form.Free;
  96.     end;
  97.   finally
  98.     Screen.Cursor := SaveCursor;
  99.   end;
  100. end;
  101.  
  102. { TChPswdForm }
  103.  
  104. procedure TChPswdForm.CreateParams(var Params: TCreateParams);
  105. begin
  106.   inherited CreateParams(Params);
  107. end;
  108.  
  109. procedure TChPswdForm.FormCreate(Sender: TObject);
  110. begin
  111.   Caption := LoadStr(SChangePassword);
  112.   OldPswdLabel.Caption := LoadStr(SOldPasswordLabel);
  113.   NewPswdLabel.Caption := LoadStr(SNewPasswordLabel);
  114.   ConfirmLabel.Caption := LoadStr(SConfirmPasswordLabel);
  115.   OkBtn.Caption := ResStr(SOKButton);
  116.   CancelBtn.Caption := ResStr(SCancelButton);
  117. end;
  118.  
  119. procedure TChPswdForm.ClearEdits;
  120. begin
  121.   OldPswd.Text := '';
  122.   NewPswd.Text := '';
  123.   ConfirmNewPswd.Text := '';
  124.   OkBtn.Enabled := FEnableEmpty;
  125. end;
  126.  
  127. procedure TChPswdForm.OkEnabled;
  128. begin
  129.   OkBtn.Enabled := FEnableEmpty or ((OldPswd.Text <> '') and (NewPswd.Text <> '')
  130.     and (ConfirmNewPswd.Text <> ''));
  131. end;
  132.  
  133. procedure TChPswdForm.OkBtnClick(Sender: TObject);
  134. type
  135.   TChangePasswordError = (peMismatch, peOther);
  136. var
  137.   Table: TTable;
  138.   Ok: Boolean;
  139.   Error: TChangePasswordError;
  140. begin
  141.   Ok := False;
  142.   Inc(FAttempt);
  143.   try
  144.     if not (FAttempt > AttemptNumber) then begin
  145.       if UsersTableName <> '' then Table := TTable.Create(Self)
  146.       else Table := nil;
  147.       try
  148.         Error := peOther;
  149.         if Table <> nil then begin
  150.           Table.DatabaseName := Database.DatabaseName;
  151. {$IFDEF WIN32}
  152.           Table.SessionName := Database.SessionName;
  153. {$ENDIF}
  154.           Table.TableName := UsersTableName;
  155.           Table.IndexFieldNames := UserNameField;
  156.           Table.Open;
  157.           if Table.FindKey([LoginName]) then begin
  158.             if NewPswd.Text <> ConfirmNewPswd.Text then
  159.               Error := peMismatch
  160.             else begin
  161.               if Assigned(OnChangePassword) then
  162.                 Ok := OnChangePassword(Table, OldPswd.Text, NewPswd.Text);
  163.             end;
  164.           end;
  165.         end
  166.         else begin
  167.           if NewPswd.Text <> ConfirmNewPswd.Text then
  168.             Error := peMismatch
  169.           else begin
  170.             if Assigned(OnChangePassword) then
  171.               Ok := OnChangePassword(Table, OldPswd.Text, NewPswd.Text);
  172.           end;
  173.         end;
  174.         if Ok then
  175.           MessageDlg(LoadStr(SPasswordChanged), mtInformation, [mbOk], 0)
  176.         else
  177.           if Error = peMismatch then
  178.             MessageDlg(LoadStr(SPasswordsMismatch), mtError, [mbOk], 0)
  179.           else MessageDlg(LoadStr(SPasswordNotChanged), mtError, [mbOk], 0);
  180.       finally
  181.         if Table <> nil then Table.Free;
  182.       end;
  183.     end;
  184.   finally
  185.     if Ok then ModalResult := mrOk
  186.     else begin
  187.       if FAttempt > AttemptNumber then ModalResult := mrCancel
  188.       else ModalResult := mrNone;
  189.     end;
  190.   end;
  191. end;
  192.  
  193. procedure TChPswdForm.FormShow(Sender: TObject);
  194. begin
  195.   ClearEdits;
  196. end;
  197.  
  198. procedure TChPswdForm.PswdChange(Sender: TObject);
  199. begin
  200.   OkEnabled;
  201. end;
  202.  
  203. end.
  204.